Code Coverage এবং Best Practices

Computer Programming - এপেক্স (Apex) Apex Unit Testing (Apex Unit Testing) |
230
230

Code Coverage হলো Salesforce-এ Apex কোডের টেস্টিংয়ের একটি পরিমাপ, যা বোঝায় যে টেস্টিংয়ের মাধ্যমে মোট কোডের কত শতাংশ পরীক্ষিত হয়েছে। Salesforce-এ ডেপ্লয়মেন্টের জন্য ৭৫% কোড কাভারেজ আবশ্যক, কিন্তু সাধারণত সর্বোচ্চ কাভারেজ নিশ্চিত করা বাঞ্ছনীয়। কোড কাভারেজ বাড়ানোর মাধ্যমে কোডের নির্ভুলতা এবং কার্যকারিতা নিশ্চিত করা যায়।


Code Coverage এর প্রয়োজনীয়তা

  1. ডেপ্লয়মেন্ট রিকোয়ারমেন্ট: Salesforce-এ কোড ডেপ্লয় করার জন্য ন্যূনতম ৭৫% কোড কাভারেজ থাকতে হয়।
  2. ত্রুটি সনাক্তকরণ: কোডের ত্রুটি এবং বাগ সনাক্ত করতে সহায়ক।
  3. কোডের স্থায়িত্ব বৃদ্ধি: কোড কাভারেজ নিশ্চিত করে কোডের স্থায়িত্ব এবং স্কেলেবিলিটি বাড়ানো যায়।
  4. পরিবর্তনের ঝুঁকি কমানো: কোডে পরিবর্তন করার সময় ত্রুটি বা অনাকাঙ্ক্ষিত ফলাফল প্রতিরোধ করা যায়।

Code Coverage এবং Best Practices

Test Data Creation: Production ডেটার উপর নির্ভর না করে Test Method-এ টেস্ট ডেটা তৈরি করা উচিত। এটি নির্ভরযোগ্য টেস্টিংয়ের জন্য গুরুত্বপূর্ণ এবং Production ডেটাবেসে প্রভাব ফেলবে না।

@isTest
public class AccountTest {
    @isTest
    static void testAccountCreation() {
        Account acc = new Account(Name = 'Test Account');
        insert acc;

        System.assertEquals('Test Account', [SELECT Name FROM Account WHERE Id = :acc.Id].Name);
    }
}

Assertions ব্যবহার করুন: System.assert(), System.assertEquals(), এবং System.assertNotEquals() ব্যবহার করে প্রত্যাশিত আউটপুট যাচাই করা উচিত, যা টেস্টিংয়ের নির্ভুলতা নিশ্চিত করে।

System.assertEquals('ExpectedValue', actualValue, 'Message if test fails');

Test.startTest() এবং Test.stopTest() ব্যবহার করুন: Async প্রসেস এবং গভর্নর লিমিট রিফ্রেশের জন্য Test.startTest() এবং Test.stopTest() ব্যবহার করা উচিত।

Test.startTest();
// Async call or code that may affect governor limits
Test.stopTest();

Exception Handling টেস্ট করুন: কোডে Exception Handling সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করতে টেস্ট মেথডে Exception Handling যোগ করুন।

try {
    // Code that may throw exception
    System.assert(false, 'Exception expected but not thrown');
} catch (Exception e) {
    System.assert(true, 'Exception was thrown as expected');
}

Edge Cases টেস্ট করুন: সাধারণ পরিস্থিতি ছাড়াও এক্সট্রিম বা এজ কেসগুলোও টেস্ট করুন, যেমন নাল ইনপুট, শূন্য মান, বা বড় ডেটাসেট।

List<Account> emptyList = new List<Account>();
System.assertEquals(0, emptyList.size(), 'List should be empty');

Mocking ব্যবহার করুন (HTTP Callouts এর ক্ষেত্রে): External Callouts বা API কলের ক্ষেত্রে Mocking ব্যবহার করা উচিত, যাতে টেস্টিং চলাকালীন কলআউট কার্যকর না হয়।

Test.setMock(HttpCalloutMock.class, new MockHttpResponseGenerator());
@isTest
global class MockHttpResponseGenerator implements HttpCalloutMock {
    global HttpResponse respond(HttpRequest req) {
        HttpResponse res = new HttpResponse();
        res.setStatusCode(200);
        res.setBody('{"name": "Test"}');
        return res;
    }
}

Bulk Testing: Bulk DML অপারেশন বা Bulk SOQL Query চলাকালীন কোডের পারফরম্যান্স যাচাই করুন। এটি নিশ্চিত করবে যে কোড বড় ডেটাসেট পরিচালনা করতে সক্ষম কিনা।

List<Account> accList = new List<Account>();
for (Integer i = 0; i < 200; i++) {
    accList.add(new Account(Name = 'Test Account ' + i));
}
insert accList;

Utility Methods টেস্ট করুন: কোডের প্রতিটি ছোট ফাংশন বা ইউটিলিটি মেথডের জন্য আলাদা টেস্ট মেথড লিখুন, যাতে সকল লজিক কভার হয়।

@isTest
static void testUtilityMethod() {
    Integer result = UtilityClass.add(2, 3);
    System.assertEquals(5, result, 'Utility method should return correct sum');
}

Avoid Hardcoded IDs: টেস্ট মেথডে হার্ডকোডেড আইডি এড়িয়ে চলুন, কারণ এটি পরিবেশভেদে পরিবর্তিত হতে পারে। পরিবর্তে, টেস্ট ডেটা তৈরি করে তার আইডি ব্যবহার করুন।

Run Tests Regularly: Deployment এর সময় বা কোডে বড় পরিবর্তন আসলে সব টেস্ট ক্লাস এবং মেথড চালান, যাতে কোড পরিবর্তনে কোনো সমস্যা না হয়।


Code Coverage এর ভালো অনুশীলন

  • 100% Code Coverage এর লক্ষ্য রাখুন: Salesforce-এ ডেপ্লয়মেন্টের জন্য ৭৫% কোড কাভারেজ প্রয়োজন হলেও সর্বোচ্চ কাভারেজের লক্ষ্য রাখুন।
  • System.debug() ব্যবহার এড়িয়ে চলুন: টেস্ট কোডে System.debug() ব্যবহার না করাই ভালো, এটি প্রডাকশন কোডে অনুপস্থিত থাকবে।
  • সহজ এবং স্পষ্ট Test Method নামকরণ করুন: Test Method নামকরণের সময় কার্যপ্রবাহ বর্ণনা করুন, যাতে এটি পড়ে বোঝা যায় কী পরীক্ষা করা হচ্ছে।

Code Coverage উদাহরণ

public class AccountManager {
    public static void updateAccountIndustry(List<Id> accountIds) {
        List<Account> accounts = [SELECT Id, Industry FROM Account WHERE Id IN :accountIds];
        for (Account acc : accounts) {
            acc.Industry = 'Technology';
        }
        update accounts;
    }
}

@isTest
public class AccountManagerTest {
    @isTest
    static void testUpdateAccountIndustry() {
        Account acc = new Account(Name = 'Test Account');
        insert acc;

        List<Id> accountIds = new List<Id>{acc.Id};
        AccountManager.updateAccountIndustry(accountIds);

        Account updatedAcc = [SELECT Industry FROM Account WHERE Id = :acc.Id];
        System.assertEquals('Technology', updatedAcc.Industry, 'Industry field should be updated to Technology');
    }
}
  • Code Coverage: AccountManager ক্লাসের সমস্ত লজিক টেস্ট হয়েছে, যা সর্বাধিক কাভারেজ নিশ্চিত করেছে।

সারসংক্ষেপ

Code Coverage Apex টেস্টিংয়ের একটি গুরুত্বপূর্ণ অংশ, যা Salesforce ডেপ্লয়মেন্টের জন্য প্রয়োজনীয়। সর্বাধিক কোড কাভারেজ নিশ্চিত করতে Assertions, Bulk Testing, Edge Cases, এবং Utility Methods টেস্টিং অন্তর্ভুক্ত করা উচিত। সঠিক কোড কাভারেজ নিশ্চিত করে Salesforce প্ল্যাটফর্মে একটি কার্যকরী এবং নির্ভুল ডেপ্লয়মেন্ট পরিবেশ তৈরি করা যায়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion